package com.upbos.upm.module;

import com.upbos.core.ret.RetData;
import com.upbos.upm.entity.Module;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

import static com.upbos.core.ret.RetData.success;

/**
 * <b>Application name：</b> ModuleController.java <br>
 * <b>Application describing： 功能模块管理</b> <br>
 * <b>Copyright：</b> Copyright &copy; 2018 upbos.com 版权所有。<br>
 * <b>Company：</b> upbos.com <br>
 * <b>Date：</b> 2018年10月06日 10:28 <br>
 * <b>author：</b> <a href="mailto:wangjz@miyzh.com"> wangjz </a> <br>
 * <b>version：</b>V5.0.0 <br>
 */
@RestController
@RequestMapping("upm/module")
public class ModuleController {

    @Resource
    private ModuleService moduleService;

    /**
     * 获取应用列表
     */
    @PostMapping("listApp")
    public RetData listApp() {
        return success(moduleService.listApp());
    }

    /**
     * 获取功能模块列表（树形）
     * @return
     */
    @PostMapping("listMenuTree")
    public RetData listMenuTree() {
        return success(moduleService.listMenuTree());
    }

    /**
     * 保存功能模块信息
     * @param module 功能模块信息，其中包含对应的资源信息
     */
    @PostMapping("saveModule")
    public void saveModule(@RequestBody Module module) {
         moduleService.saveModule(module);
    }

    /**
     * 删除功能模块，同时删除下级功能模块以及相关的资源
     * @param id 功能模块id
     */
    @PostMapping("deleteModule")
    public void deleteModule(String id) {
        moduleService.deleteModule(id);
    }

    /**
     * 获取功能模块所属的资源列表
     * @param moduleId 功能模块Id
     */
    @PostMapping("listModuleRes")
    public RetData listModuleRes(String moduleId) {
        return success(moduleService.listModuleRes(moduleId));
    }

    /**
     * 改变功能模块上下级关系以及顺序
     * @param srcId 被改变的功能模块id
     * @param destId 目标功能模块id
     * @param type 0-放在目标节点下，1-放在目标节点前，2-放在目标节点后
     */
    @PostMapping("sort")
    public void sort(String srcId, String destId, Integer type) {
        moduleService.sort(srcId, destId, type);
    }
}
